Extra Delete
Let's remove a song from our playlist
#
App.jsApp.js
deleteSong(index) { console.log(index);}
Don't forget to bind it in the constructor
App.js
this.deleteSong = this.deleteSong.bind(this);
Pass this function down to Songlist
App.js
<SongList playlists={this.state.playlists} handleAdd={this.addLovedSong} handleDelete={this.deleteSong}/>
Pass this function down to Song, and add a new prop index
App.js
<Song song={song} key={index} index={index} handleAdd={this.props.handleAdd} handleDelete={this.props.handleDelete}/>
Add a new td
with an x in it and trigger this onClick
App.js
<td onClick={() => this.props.handleDelete(this.props.index)}>X</td>
When we click an X it should log an index position from our delete function in App.js
Now let's add our delete functionality. Remember this is just some dummy data - so we can just use the index position. But this isn't the 'safe' way to do it in production. You'd want to use an id number.
App.js
deleteSong(index) { this.setState({ playlists: { songs: [ ...this.state.playlists.songs.slice(0, index), ...this.state.playlists.songs.slice(index + 1), ], }, });}
The behavior of our app is weird, when we click on x it also adds it as a favorite.
Let's move our onClick to just the song title
App.js
return ( <tr key={this.props.index}> <td onClick={() => { this.props.handleAdd(this.props.song); this.toggleLove(); }} > {this.props.song.title} </td> <td>{this.props.song.artist}</td> <td>{this.props.song.time}</td> <td onClick={() => this.props.handleDelete(this.props.index)}>X</td> {this.state.love ? <td>♥</td> : <td></td>} </tr>);